System Aspects

The data model which is sketched in the previous section is realized by the SOS system. One part of the system, the SOS schema compiler, is concerned with the compilation of SOS schemas. During the compilation process the type information is made persistent. This is done by creating an SOS object for each schema and each type definition within a schema. The objects which are created later on by an application program are associated with an object representing the type. Those ``type objects'' are stored in the so-called meta database, their types are defined in the so-called meta schema. This allows to interpret an object dynamically by inspecting the associated type object. Components are accessed by using specific get- and set-operations of the host programming language which are generated automatically by the interface generator of the compiler. For the components, SOS determines a fixed and language independent storage layout. The implementation of the methods specified within a class type definition is done in some programming language (which may be a compiled or an interpreted language). Depending on the degree to which the language performs type-checking, the interface generator of the schema compiler generates appropriate interfaces and/or code for this language.

SOS comes with several predefined types like e.g. sos_Object, List or Set. Section [*] contains a description of these types. One of the predefined types, the type sos_Container, should be noticed carefully, because it serves as an interface to the persistent storage manager. Each object of SOS belongs to exactly one container, which is determined when an object is created. The containers provide a simple mechanism for synchronization, recovery and clustering of objects. A detailed definition of all predefined types can be found in the manual pages in Appendix [*].

For each programming language for which an embedding of SOS is provided, the specific concepts of SOS are mapped onto the concepts of the host language. For the current release of SOS, this is done for C++. The C++ interface is described in Section [*].